package com.stream;

import java.util.Arrays;
import java.util.List;

public class 终止操作_归约 {
	public static void main(String[] args) {
		List<Integer> list1 = Arrays.asList(1,2,3,4,5);
		//将整数集合中的所有元素加和
		int sum = list1.stream().reduce(0,Integer::sum);
		System.out.println(sum);
		
		/**
		 * 两个参数时：
		 * 第一个参数为初始值
		 * 第二个参数为指定的运算规则，将第一个参数做为参数进行运算
		 * 
		 * 当有两个参数时：
		 * 如果是串行运算，第一个参数可以随便指定；如果是并行运算即Stream.parrallel()或者parrallelStream()时，是每个线程单独计算，即每个线程的初始值都是第一个参数
		 * 所以并行运算时，第一个参数必须满足accumulator.apply(firstParam,t) = t,所以做加和时第一个参数应该为0，做乘积时第一个参数应该为1
		 */
		sum = list1.stream().reduce(1,(v1,v2) -> v1 + v2);
		System.out.println(sum);
		
		
		sum = list1.parallelStream().reduce(1,(v1,v2) -> v1 * v2);
		System.out.println(sum);
	}
}
